package edu.upc.cineplanet.repositoryjdbc;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;

import javax.sql.DataSource;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.EmptyResultDataAccessException;
import org.springframework.jdbc.core.simple.ParameterizedRowMapper;
import org.springframework.jdbc.core.support.JdbcDaoSupport;
import org.springframework.stereotype.Repository;

import edu.upc.cineplanet.Domain.Entrada;
import edu.upc.cineplanet.Domain.UsuarioWeb;
import edu.upc.cineplanet.repository.EntradaRepository;

@Repository
public class EntradaRepositoryJdbc extends JdbcDaoSupport implements EntradaRepository {

	@Autowired
	public EntradaRepositoryJdbc(DataSource dataSource){
		setDataSource(dataSource);
	}
	
	public List<Entrada> mostrarEntradas(String usuario) {
		List<Entrada> entradas;
		String sql = "select * from entrada where co_usuario='" + usuario+"'";
		entradas = getJdbcTemplate().query(sql, new EntradaRowMapper());
		return entradas;	
	}
	
	private class EntradaRowMapper implements ParameterizedRowMapper<Entrada>{
		public Entrada mapRow(ResultSet rs, int rowNum) throws SQLException{
			Entrada o = new Entrada();
			o.setCodigoEntrada(rs.getString("co_entrada"));
			o.setCodigoUsuario(rs.getString("co_usuario"));
			o.setCodigoFuncion(rs.getString("co_funcion"));
			o.setTipoEntrada(rs.getString("no_tipoentrada"));
			o.setCantidadEntrada(rs.getInt("qt_cantidad"));
			o.setPrecioEntrada(rs.getDouble("nu_precio"));
			return o;
		}
	}
	

	public void comprarEntrada(Entrada entrada) {
		
		entrada.setCodigoEntrada(creaCodigo(entrada));
		
		String sql = "insert into entrada(co_entrada, co_usuario, co_funcion, no_tipoentrada, qt_cantidad, nu_precio) values (?, ?, ?, ?, ?, ?)";
		getJdbcTemplate().update(sql, entrada.getCodigoEntrada(), entrada.getCodigoUsuario(), entrada.getCodigoFuncion(), entrada.getTipoEntrada(), entrada.getCantidadEntrada(), entrada.getPrecioEntrada());
				
	}

	public Entrada busquedaEntrada(int codigoEntrada) {
		String sql = "select * from entrada where co_entrada = ?";
		Entrada entrada;
		try{
			entrada = getJdbcTemplate().queryForObject(sql, new Object[]{codigoEntrada}, new EntradaRowMapper());
			
		}catch(EmptyResultDataAccessException ex){
			return null;
		}
		return entrada;
	}

	public void eliminarEntrada(Entrada entrada) {
		String sql = "delete from entrada where co_entrada = ?";
		getJdbcTemplate().update(sql, entrada.getCodigoEntrada());
		
	}
	
	public String creaCodigo(Entrada usu) {
		String codigo;
		String nuevo_codigo;
		String sql = "SELECT (MAX(U.CO_ENTRADA)+1) FROM ENTRADA U";
		codigo = getJdbcTemplate().queryForObject(sql, String.class);
		
		nuevo_codigo = codigo;
		int tam = 0,diff = 0;
		if(codigo.length() < 6){
			tam = codigo.length();	
			diff = 6-tam;
			while(diff>0){
				nuevo_codigo = "0"+nuevo_codigo ;
				diff--;
			}						
		}
		return nuevo_codigo;
	}	
	
	
}
